package app.bean;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Date;

import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.inject.Inject;

import com.google.gson.Gson;

import app.DAO.MovimientoDAO;
import app.entidad.Movimiento;
import app.ws.MensajeRespuesta;

@ManagedBean
@ApplicationScoped
public class TransaccionBean {

	
	Movimiento movimiento;
	
	MensajeRespuesta mensaje;
	
	@Inject 
	MovimientoDAO movimientoDAO;
	
	
	public MensajeRespuesta getMensaje() {
		return mensaje;
	}

	public void setMensaje(MensajeRespuesta mensaje) {
		this.mensaje = mensaje;
	}




	public Movimiento getMovimiento() {
		return movimiento;
	}




	public void setMovimiento(Movimiento movimiento) {
		this.movimiento = movimiento;
	}




	@PostConstruct
	public void init(){
		movimiento=new Movimiento();
		mensaje = new MensajeRespuesta();
	}
	
	
	/**
	 * Generacion del cliente para el consumo del servicio del banco central
	 *
	 * @return      pagina de reporte de transaccion 
	 */
	
	public String transferenciaCliente(){
		
		try {
			
			movimiento.setFecha((new Date()).toString());
			
			URL url = new URL("http://localhost:8081/BancoCentral/rest/validacionBC/validacion");
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setDoOutput(true);
			conn.setRequestMethod("POST");
			conn.setRequestProperty("Content-Type", "application/json"); 
		
			String input=new Gson().toJson(movimiento);

			OutputStream os = conn.getOutputStream();
			os.write(input.getBytes());
			os.flush();

			BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
			String output;
			output = br.readLine();
	
			int numero = new Integer((output.substring(output.indexOf(':')+1,output.indexOf(',')))).intValue(); 
			output=output.substring(output.indexOf(',')+1); 
			String mjs = (output.substring(output.indexOf(':')+2,output.indexOf(',')-1)); 
			output=output.substring(output.indexOf(',')+1); 
			String fecha1 = (output.substring(output.indexOf(':')+4,output.indexOf('}')-3));
			
			
			mensaje.setCodigo(numero);
			mensaje.setFecha(fecha1);
			mensaje.setMensaje(mjs);
			
			
			conn.disconnect();
			movimientoDAO.debito(new Integer(movimiento.getCuentaOrig()).intValue(), movimiento.getMonto());
			

			} catch (MalformedURLException e) {

				e.printStackTrace();
			} catch (IOException e) {

				e.printStackTrace();
			}
		
		return "Respuesta";
		
	}


}
